1. Field of the Invention
The invention generally relates to computer database systems. More specifically, the invention relates to a database abstraction model constructed over an underlying physical database, and to a database query application used to generate queries of the underlying physical database from a query of the database abstraction model.
2. Description of the Related Art
Databases are well known systems for storing, searching, and retrieving information stored in a computer. The most prevalent type of database used today is the relational database, which stores data using a set of tables that may be reorganized and accessed in a number of different ways. Users access information in relational databases using a relational database management system (DBMS).
Each table in a relational database includes a set of one or more columns. A column typically specifies a name and a data type (e.g., integer, float, string, etc). Each cell in a column stores a common element of data. For example, in a table of employee information, each employee's date of hire might be stored in a “hire date” column. Reading across the rows of a table provides a set of data elements from different columns. Tables that share at least one attribute in common are said to be “related.” Further, tables without a common attribute may be related through other tables that do share common attributes. A path between two tables is often referred to as a “join,” and columns from tables related through a join may be combined to form a new table returned as a set of query results.
Queries may specify which columns to retrieve data from, how to join the columns together, and conditions (predicates) that must be satisfied for a particular data item to be returned in query results. Current relational databases require that queries be composed in complex query languages. One widely used query language is Structured Query Language (SQL), however other query languages are also used. An SQL query is composed from one or more clauses, and well-known SQL clauses include the SELECT, WHERE, FROM, HAVING, ORDER BY, and GROUP BY clauses. Composing a proper SQL query requires that a user understand both the structure and content of the relational database as well as the complex SQL syntax (or other query language).
Users are often interested in the relationships, or the ordering, of otherwise unordered data. For example, a user might desire to identify individuals who have had more than three heart attacks, or to retrieve the first, last, or last five result values of a test administered to a patient. Alternatively, users may wish to specify that query conditions are evaluated only against certain elements of the sequence. For example, a user might desire to identify individuals where one of the last 5 test results was above a specified value. Doing so is useful where data for an entity (e.g., a patient) is available over a long period, but only recent events are relevant in a particular case.
Constructing SQL queries for these scenarios, however, is generally difficult for average users. Doing so requires a query that not only retrieves data that satisfies a condition, but also requires that query specify how results should be ordered, or sequenced, to retrieve the correct results. Columns of a relational database often store data in an unordered fashion, with the rows of a table typically added as they are entered. For example, a column used to store test results does not include an indication of when the test was given, data from other columns must be joined. In addition to a chronological sequence, a user may wish to sequence data by magnitude or using other ordering rules.
Accordingly, it is desirable to provide users with a database query application that includes the ability to query data based on the order, or sequence, of the data.